在 Angular 2 中,一個 Module ( 模組 ) 是一個把彼此互相關聯的 components、directives、pipes 和 services 整合的機制。然後這個模組可以再和其他模組結合,最後就形成我們的網頁應用程式。網頁就像拼圖一般,由許多小碎片的組件和一塊一塊的模組所構成。
一個模組又由點像是類別 ( Class ),一樣也有 public 和 private 的概念。應用程式只能取用公開的部分,私有的部分則看不見。
簡單的 Angular 2 Quick Start 大概長這樣
|- app/
|- app.component.html
|- app.component.ts
|- app.module.ts
|- index.html
不一定就是長這樣,但這幾個文件是一定有的,可以看到裡面有 app.module.ts
,這就是一個 Module。接著來看看裡面的樣子。
我們用 NgModule
來定義是模組。
//app/app.module.ts
import { NgModule } from '@angular/core';
@NgModule({
imports: [ ... ],
declarations: [ ... ],
bootstrap: [ ... ]
})
export class AppModule { }
NgModule
這個裝飾器 ( decorator ) 需要至少三個特性: import
、declaration
和 bootstrap
。
接著來看看簡單版的應用程式如何用到模組,這邊的案例是一個模組搭配一個組件。
//app/app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: '<h1>My Angular 2 App</h1>'
})
export class AppComponent {}
//app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
imports: [BrowserModule],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
這邊 AppModule
引入 BrowserModule
,它包含了一些最基本的 directives
、 pipes
和 services
。此外這邊的根組件是 AppComponent
。declarations
負責定義程式需要甚麼東西,所以也要填入 AppComponent
。
模組有兩種:
NgModule
裝飾器,且他會引入 BrowserModule
。CommonModule
。按照慣例, root module 通常都會命名為 AppModule
。
假設我們現在還有 CreditCardMaskPipe
、 CreditCardService
、 CreditCardComponent
,我們就要更新一下我們的模組,否則 Angular 也不會去編譯這些東西。
//app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { CreditCardMaskPipe } from './credit-card-mask.pipe';
import { CreditCardService } from './credit-card.service';
import { CreditCardComponent } from './credit-card.component';
@NgModule({
imports: [BrowserModule],
providers: [CreditCardService],
declarations: [
AppComponent,
CreditCardMaskPipe,
CreditCardComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
providers
只能用在 root module ,用來注入依賴服務。用在 feature module 的話,很可能會導致不明的錯誤。
下篇 Angular 2 Module ( 2 ) 會繼續探討。
看到這一篇才發覺我整個專案只有一個 root module,
想請教一下,大概什麼情境會切出 feature module
當你寫了一個類似框架的東西在你的專案裡面,就可以變成一個新的模組
像是你有個模組可能專門負責UI處理,貫穿整個專案